package com.demo.java.OD301_350.OD320;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【阿里巴巴找黄金宝箱5(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146106896
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 读取输入数组并转换为整数数组
        int[] nums = Arrays.stream(in.nextLine().split(","))
                .mapToInt(Integer::parseInt)
                .toArray();

        // 读取 k 的值
        int k = in.nextInt();

        // 用于记录窗口中的数字频率
        Map<Integer, Integer> frequencyMap = new HashMap<>();
        // 前缀和数组，存储从数组起始到当前位置的和
        long[] prefixSum = new long[nums.length + 1];

        // 滑动窗口的起始位置
        int start = 0;
        // 当前窗口的最大和
        long maxSum = 0;

        for (int i = 0; i < nums.length; i++) {
            // 更新前缀和
            prefixSum[i + 1] = prefixSum[i] + nums[i];

            // 更新当前数字的频率
            int frequency = frequencyMap.getOrDefault(nums[i], 0);
            frequencyMap.put(nums[i], frequency + 1);

            // 如果窗口中有超过 k 个不同的数字，则缩小窗口
            while (frequencyMap.size() > k) {
                int startNum = nums[start];
                frequencyMap.put(startNum, frequencyMap.get(startNum) - 1);
                if (frequencyMap.get(startNum) == 0) {
                    frequencyMap.remove(startNum);
                }
                start++;
            }

            // 如果窗口内有 k 个不同的数字，计算当前窗口的和
            if (frequencyMap.size() == k) {
                long sum = prefixSum[i + 1] - prefixSum[start];
                maxSum = Math.max(maxSum, sum);
            }
        }

        // 输出最大和
        System.out.println(maxSum);
    }
}